Skip to content

feat(windows): 完善 Windows 插件能力与宿主工作流 - #1478

Draft
Mucheen wants to merge 25 commits into
previewfrom
codex/windows-plugin-parity-unified
Draft

Mucheen wants to merge 25 commits into
previewfrom
codex/windows-plugin-parity-unified

Conversation

@Mucheen

@Mucheen Mucheen commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

主要改动

补齐 Windows 契约插件安装、市场、构建与宿主工作流,并将分阶段交付统一保留在本 PR;基于已合入的 preview 继续保持 Draft 和能力门控。

  • 安装、市场与详情:Ed25519 发布者签名、完整包摘要、审批字节绑定、事务安装/更新/回滚;多仓库来源、受控 HTTPS 下载、重定向与预算、来源隔离;概览/更新/权限/设置/依赖五页签及状态解释。清理失败保留原包、owner 和重试入口。
  • 构建、运行与测试:复用 Core catalog/model/plan/decoder、统一执行与进程 owner;静态/命令/Provider 模型、工具候选、完整程序审批、输出/诊断跳转、模型选项与依赖、语言导入和网页构建入口。无效显式配置直接失败;运行/测试沿用保存同步、Core discoverTests/testPlan、原生复验、精确 case 与取消回收。
  • 设置和作用域重载:按语言/构建页注册,保留全局/项目来源、草稿、保存/取消、继承重置、字节 CAS、原子替换和读回。global reload 保留跨窗口插件屏障;project reload 绑定真实原生窗口实例、项目登记、保存设置与包身份,暂停并排空该窗口/工作区/插件的构建、设置/网页/原生面板函数与 VCS owner,再只合并目标模型。其他插件及窗口保持有效。持久私有设置修订拒绝晚 prepare/approval;Provider 清理失败重试会实际重试原初始化/owner,所有原 sibling 都会尝试清理。原生预检不可取消,进入模型审批后提供取消;取消后不继续模型准备。
  • 函数与原生界面:设置 action、网页 functions.list/invoke/cancel、原生面板 load/action 复用同插件独立 Core Provider、正式函数协议、审批、进度/结果/错误、取消和清理。完成凭据绑定真实窗口实例,清理失败保留主界面可见的精确 owner Retry;关闭/替换及迟到启动/销毁不清新 owner。native schema 1 的树/列表/表单使用公共控件、虚拟化、键盘/IME、列与窄宽回退,状态按完整包/窗口/工作区隔离并累计限制 64 KiB;全部当前字段先交 Core 校验。生产工具窗口注入 typed NativeFunctionPort,原生 catalog 登记决定面板/唯一构建实例/函数/程序。打开顺序在首个 await 前固定,旧 open 不能覆盖新面板;模型/设置使成功句柄失效后,Retry 先成功关闭原句柄再重新登记,失败不能绕过清理。工具栏消费批准的 15 个 host 图标,10 个新增 IDEA SVG 逐字节保留浅深资源;公共 InfoTip 统一延迟悬停、点击或键盘固定/切换、Escape/外点击、可访问说明与卸载清理,字段或动作禁用时说明仍可用。公共 SearchField 增加本地化清空按钮并恢复输入焦点;在原生表单中,清空仅修改草稿,Enter 才提交空字符串;隐藏重开保留空草稿,disabled/readOnly 不可清空且说明仍可用。Input 复用最小 trailingAccessory 插槽与统一右侧留白。原生表单 primary/normal 分别映射公共 Button 的 accent/default,修正主次动作外观颠倒,继续复用公共控件语义。虚拟树 viewport 为当前选择接通 Shift+F10/ContextMenu,滚动挂载后复用公共 Base UI anchor,菜单按键不触发树导航,展开按钮保留方向导航;行移出关闭菜单,busy/disabled 不误执行,Inspect 单次 typed action 保持准确目标。Escape 返回树,外点击输入框或动作打开新对话框时尊重新焦点所有者,不强制抢回。表单动作组按整组自然宽度切换横排/纵排,修正 flex-wrap 在窄面板形成多列的问题;保留公共 Button/InfoTip、原节点、焦点、草稿和单次完整 values。首次同步测量,ResizeObserver 后续通知只排一个动画帧,卸载断开观察并取消帧,消除横竖切换产生的浏览器反馈错误。共享语言服务、通用 backend 与 host services 明确 unavailable;ui:3 继续关闭。
  • 原生面板停靠:按契约将 left/bottom/right 接入现有活动栏、侧栏及底部插槽,复用 NativeToolWindow 和 typed 函数端口;位置覆盖只在当前窗口/工作区内存保存。移动/关闭/同槽替换使用精确句柄,关闭后按当前入口恢复焦点,底部终端保持挂载。未新增布局系统或公共拖动循环。
  • 项目生成:Core catalog/form/plan 驱动 files/command/archive、JDK、Git 初始化与工程打开;同级私有 staging、受限 HTTPS、有界解压、路径/链接/预算、原子不覆盖发布与清理重试。停用生成器可显式启用,requirements 可跳市场;表单、审批与需求绑定包身份并拒绝旧结果。保留真实 Core Maven/sample 宿主事务回归。
  • VCS:保留 Git 独立工作流;插件根/ownerOf、原生目录/登记/代次/包隔离、短会话 status、根映射/CAS 与有界 FileWatcher 被动失效、历史/文件历史/只读基线 Diff。增加一次性 status receipt 的选中提交/回滚、冲突文件 resolve、整根 update/cleanup 及普通文件 add/delete:确认冻结根、全部端点、数量、消息与风险,写前重新读取完整状态并复验 Core ownerOf、包授权/签名与原生 scope。只允许可证明的普通文件;缺失/目录端点、会隐式提交 added/replaced/renamed/copied 祖先的选择、Windows 路径别名跨嵌套根均拒绝。resolve 只接受当前完整状态中的现存冲突普通文件,不展开 oldPath;cleanup 使用协议规定的空参数和整根范围。update/cleanup 只允许工作区恰好等于完整无歧义根且不存在嵌套根。明确失败与未知结果分别展示,取消/丢失回复/非法回复不自动重发;Retry 只清理原 owner。写入失效标记持续到下一次完整检测,覆盖 owner 回收后迟到的元数据事件;完成/失败在原 scope 刷新同根 status/history,watch 不触发写入。add 仅允许根直属现存 unversioned 普通文件,拒绝隐式添加父目录;delete 确认全部端点及磁盘删除风险,无 keep-local/宿主备份。展开的 oldPath 若有独立状态,也复验其冲突、忽略、未受控、外部和子模块状态,不能借重命名混入拒绝项。
  • 资源与证据:继续使用平台可写存储,不写发行包或插件安装资源;受控 API3 设置包完整声明 languageServers/serverProcess 及两个程序,安装审查与批准记录逐项绑定原包。设置双窗口/CAS/reload/生命周期/资源哈希驱动绑定输入计划、源码提交、目标架构、冻结配置与 exe 哈希;SkipBuild 拒绝旧宿主。reload 保存走真实注册语言设置页,工具栏兼容 None keymap 与紧邻计数。冻结的 Tauri invoke 保持原样,Windows observer 仅包装实际 fetch IPC、登记真实 callback Map;退出时先恢复 fetch,再有界排空 callback,再正常退出产品,最后比较资源快照,未退出或未排空不能通过。MSYS/zsh 资源只读门禁使用根目录相对入口。同步工作树资源清单、复用拒绝与文档;40 个共享契约夹具完成分类(6 wired、34 known gaps),两项 debug adapter 夹具如实记未接入。显式诊断的 suite runtime、逐 case repo/WC/profile 与证据输出扩展既有 plugin-host-acceptance-state 排除清单,拒绝跨 worktree 复用;同步路由、拒绝测试及 docs/ci-builds.md。ui:2 回退受控包的静态 ZIP、source plan、私有 CDP trace/descriptor/callback 和资源证据纳入原生验收状态排除路由,不能传递安装审批或跨 worktree 复用。ui:1 字面文本验收新增完整 unsigned API3 fixture 和正式 -TextWindow 入口:构建前后完整源码库存一致才写 identity,SkipBuild 拒绝 legacy/漂移库存,plan 绑定当前提交与源码,源码扫描共用 300 秒截止时间;观察器在开窗前捕获原始 Document/桥脚本,loopback 正控验证字面 URL 请求,逐字 DOM/CSP/冻结入口/资源及失败清理都有断言。网络记录不能计数 postMessage,报告保留 null 与限制,禁止虚构零 IPC。ZIP/工作区/plan/DOM/请求与计数器证据纳入原生验收状态拒绝路由。没有新可复用下载或缓存资源。
  • move 安全证据:固定 Subversion Provider 3a558be0 与历史 SDK 54598ae,通过原 Provider stdio 和签名有效的 VisualSVN Apache SVN 1.15.0 x64 完成三项真实诊断。目标缺失时按叶子移动;目标文件在 status 后、SVN 前出现时 E155033,文件字节/identity 不变,但 --parents 已把目标 schedule added;同期出现目录时成功回复却移动到 target.txt/source.txt。两项反例说明当前 v1 fileOperations:1 不保证精确叶子、原子不替换或失败无 WC 元数据副作用。官方 SVN v0.1.0 prerelease 当前仅有 Darwin 完整包:14 文件、tag 字节与 7 个 SDK 锁哈希核对通过,尚无 Windows 发布包,完整 requires 中的 vcsProviders 仍被宿主拒绝。unsigned Community 需明确批准,不能用校验和/GitHub 来源代替发布者签名;双目标打包 patch 仅为未执行提案。新增显式固定输入诊断入口及离线回归,case/suite 硬 deadline、Windows Job 先归属后释放、零成员证明后才允许恢复读取;清理无证明时隔离保留,输入输出真实路径/junction 重叠先拒绝,最终哈希及读取错误写入失败报告。gate 属诊断 wrapper,Provider 本身无目标 precheck;所有 safetyPass=false,不新增生产 move 入口、死菜单或磁盘 fallback。Provider/系统 SVN/诊断 gate 与 sealed manifest 是显式外部输入,正常 CI 不联网下载或运行它们。固定 Apache SVN 1.15.0 官方源码 e49d66ef(r1938480)进一步表明:move7 四参数 FALSE 只在单源及稳定父路径下保留叶子解释,检查先于 WC 锁;锁不排除外部 FS 写入,元数据/rename/源删除分阶段,WIN32 直接用 MOVEFILE_REPLACE_EXISTING 调用 MoveFileExW。该静态结论不能证明 VisualSVN 二进制身份或真实竞态;42 条引用按物理 LF 行重验,修正换页符造成的旧摘录偏差。
  • CI:InfoTip 和图标测试新增独立逐文件进程与已有 Vite SVG preload,图标测试移出有 mock 污染风险的宽泛 group,避免重复注册;逐文件隔离注册真实 MainLayout/catalog/活动栏/三侧插槽与 typed 原生函数端口组合回归,以及 VCS add/delete 确认、控制器和端点边界回归;R16 增加公共 SearchField 独立测试注册,沿用 Vite SVG preload;Python 设置 helper 26 项、SVN 诊断 helper 14 项、ui:2 回退 helper 10 项及 ui:1 字面文本 helper 10 项均注册有界逐项报告;新增 Node 离线诊断逐项计时入口,前端 job 上传前始终生成组合 HTML/JUnit,失败结果也保留。专用 Core stdio 入口显式执行 resolve/cleanup/add/delete 四操作的唯一 ignored 用例,设置 90 秒进程预算并要求唯一 passed。不得把 ignored 或零用例计为验证。

验证

  • R19 最终集成去重 947 项通过、5 项既有跳过,HTML/JUnit 无失败/错误/超时。包含七个前端文件、完整 Windows 宿主逐项计时及显式 Core stdio 四操作、Node 契约/资源/i18n 回归、ui:1 与 ui:2 各 10 个 helper、4 个真实 PS 函数离线边界及 1 个真实 Edge 组件用例。产品验收与静态研究不计入该总数。
  • 最终源码正式 Windows x64 Release 通过(19.5 分钟);PR 实际基线范围内 325 个 Windows/Core/i18n 源码 SHA-256 构建前后相同。早期构建已在发现 RO 错误后按精确进程身份取消,未计成功;以修复后的重建为准。官方 --no-bundle 结果不代替签名安装包或产品交互验收。
  • 真实 Edge 六阶段宽窄几何、自然宽度、焦点、草稿、InfoTip、禁用和单次完整 values 通过,导航前全量 window.error 与 pageerror 均零;浏览器/Vite/profile 清理完成。测试函数已受版本控制,当前 runner 仍在 ignored 证据中且依赖本机环境,未宣称 CI 浏览器回归或产品/WebView2 验收。
  • 完整 TypeScript(109.8s)、格式/lint、14 项公共门禁及最终复核通过,包含原始 zsh bundle 只读脚本、共享契约、Windows 边界、Notes/矩阵/资源拒绝回归。精确暂存树与最终 SHA 的矩阵变更门禁通过。
  • M10 ui:1 真实验收仍 pending:R19 独立 lane 正式构建超时,无验收 EXE;提交的是经复审修复和离线验证的工具。修复旧 BASE 锁死、缺失 identity 生产入口、无界第三方库存及虚构 IPC 计数;工具通过不冒充安装/渲染/隐藏重开/退出通过。
  • 既有 R18 受控 ui:2 九阶段与 R17 受控设置九阶段证据保持原范围和原基线(272f2e3f / ae89d43),本轮未重跑、未加入总数;SVN 三个诊断反例仍全部 safetyPass=false。ui:3/vcsProviders/functions/buildProviders/buildSystems 门控不变。

剩余范围

  • 保持 Draft;ui:3/vcsProviders 等未完整验收能力关闭,矩阵 partial/pending。受控端口/Provider 和原生测试不能代替完整包、系统 SVN 与真实进程树工作流验收。
  • M10 受控设置九项已完成;受控 ui:2 postMessage 回退九阶段也已完成;ui:1 字面文本安全、完整外部包/函数七项、Windows arm64、真实键盘/IME/浅深主题/窄窗口、正式发布签名包仍 pending。完整 sample 的 buildProviders/buildSystems 要求仍关闭,不删除 requires 或伪造发布者包来通过验收。
  • M7 的 MainLayout/公共组件组合回归不能替代 WebView2 中文输入、真实键盘、屏幕阅读器、焦点、浅深主题、窄窗口、滚动、双窗口及完整包生产链。Happy DOM 测试的补发 click 不视为真实浏览器证据;R17 仅在已开放插件设置列表中补充公共 SearchField 的真实 WebView2/CDP 默认激活,原生 ui:3 及其他消费者仍待验;位置覆盖仅当前进程的窗口/工作区内存,不承诺重启恢复或 macOS 六组停靠已对齐。
  • VCS move、缺失节点类型证明、嵌套文件 add 与 gutter/Annotate 保留后续范围。已取得固定 Provider 源码和真实 SVN x64 诊断证据,仍缺正式 Windows Provider 完整包及生产宿主竞态验收。现有真实反例要求先补上游/协议精确叶子及失败副作用保证;目录与常见 rename 的缺失端点继续拒绝。
  • 正式签名插件、受信任 HTTPS 市场完整安装/重启/同源更新、生成后构建,以及 macOS 原生/Swift bridge、Windows arm64 无本轮运行证据。

本地证据:.artifacts/integration-round19/ 与 .artifacts/test-stability/r19-combined.{json,html,junit.xml};生成报告不提交。原 Cargo.toml、pycache 与主 checkout 改动保留;本轮 owned 进程清理后核对为空。

@ghfind-review ghfind-review Bot added the review: medium ghfind author score; see https://ghfind.com label Oct 25, 2026
@Mucheen Mucheen changed the title feat(windows): 插件能力对齐 macOS(统一交付) feat(windows): 完善 Windows 插件能力与宿主工作流 Oct 25, 2026
Connect task and test approval, output and cancellation to the native owner; validate passive Maven model snapshots and queued refreshes. Revoke stale editor attachments and queued text across buffer, workspace and package changes. Cover real WebView lifecycle workflows through the product Quit path.
Connect reviewed Provider model/dependency and page build workflows,
workspace test discovery, source-backed plugin settings, transactional
project generation, and passive VCS root ownership. Keep rollout gates
closed until product acceptance is complete.

Retain cleanup owners for Stop retry, preserve framework-specific actions
and Core reply data, and repair page refresh cancellation routing.
Merge preview d369c9a, classify its new debugger fixtures and make the
debug baseline checker resolve Windows file URLs correctly.
Integrate the reviewed R9 changes and preview 32021a8. Preserve typed archive interruptions and staging identity, global settings reload receipts, and isolated VCS session cleanup completion.

Validation: 1252 passed / 5 skipped, Windows x64 Release, shared contracts, runtime bundle immutability, Rust documentation, localization and matrix gates.
Integrate reviewed R10 settings functions, generator requirement interactions and segmented forms, and guarded VCS mappings/watch leases. Preserve original owners on late native completion, invalidate stale reviews and release late watcher publication on window destruction.

Validation: 1061 passed / 6 skipped, complete TypeScript check, Windows x64 Release, contracts, localization, runtime resource immutability and actual-tree matrix gates.
Route web function requests through the existing Core-owned provider lifecycle,
retain exact-window cleanup retries, and retire completed receipts with their
native window instance. Add native tree/list/form rendering and Core data
validation while keeping ui:3 admission closed. Extend VCS short sessions with
read-only history and baseline diffs, cancellation and cleanup recovery.

Cover approval/result shapes, form drafts, virtualized controls, deleted and
renamed paths, junction escapes and late-owner races. Update fixture coverage,
localization, capability evidence and the owning architecture note.
接入原生面板三侧布局、精确关闭与焦点恢复;新增受约束的 VCS resolve/cleanup 及真实 Core stdio 回归。补充设置实包验收驱动、源码身份校验、CI、共享翻译、资源复用规则和功能矩阵。未开放 ui:3/vcsProviders,真实完整包与系统客户端验收继续 pending。
Map all approved host icons to fixed theme resources and reuse a shared accessible InfoTip for disabled fields and actions. Register isolated UI regression suites and record remaining settings runtime and VCS move safety evidence.
Reuse the public input accessory for localized search clearing, preserve native
form draft and focus behavior, and register isolated consumer regressions.

Complete controlled settings package declarations and installation approval
checks, observe frozen Tauri IPC through fetch callbacks, and verify bounded
shutdown before resource snapshots. Record real SVN move counterexamples while
retaining capability gates and explicit runtime evidence limits.

Validation: 946 passed, 5 existing skips; full TypeScript, focused lint/format,
shared contracts, stability and platform gates; formal Windows x64 Release.
Correct primary/normal native button variants and cover shared-fixture actions.
Verify real WebView2 SearchField default keyboard activation in settings acceptance.
Add bounded fixed-input SVN move diagnostics with proven cleanup, path isolation,
and failure reporting; wire timed CI reports and resource reuse exclusions.
Update owning decisions and partial feature matrices without opening gates.
…back

Open the shared context menu for the selected virtual tree row, preserve
outside and action-owned focus, and retain expand-button keyboard navigation.
Add bounded controlled ui:2 fixture and real WebView2 postMessage fallback
acceptance with exact fault injection, identity checks and failure cleanup.
Register helper reports and nonreusable resources; document the SVN upstream
replacement boundary without opening capability gates.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: medium ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant